#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020/11/7 20:45
# @Author : youngchaolin

# 参考上节课内容

'''
hashlib主要用于加密和解密
用法：
1 将bytes字节类型，转换成固定长度的16进制数字组成的字符串
2 不同的bytes数据利用相同的算法，转换成的结果一定不相同，反之一定相同
3 hashlib算法不可逆，目前已被中国科学家破解
'''


# 普通加密
import hashlib
m=hashlib.md5()
m.update('messi'.encode('utf-8'))
print(m.hexdigest())

'''
三步法：参考上一课内容
'''

# 加盐，在创建加密对象时，可以传入参数，这就是加盐

# 还可以动态的加盐

# sha系列 金融类，安全类才会用
# 随着sha系列数字越高，加密越复杂，越难被破解

m=hashlib.sha3_256()
m.update('messi'.encode('utf-8'))
print(m.hexdigest())
print(len(m.hexdigest())) #64位16进制，就是256位二进制


# 文件校验
# 读取大文件，每次读取1024字节，然后再update
def get_file_md5(file_path):
    m=hashlib.md5()
    # 打开文件，操作文件句柄读取
    with open(file_path,mode='rb') as f:
        # 每次读取1024字节
        while 1:
            block=f.read(1024)
            # 多次加密，和一次整体加密效果一样
            print(f'读取到了{f.tell()}位置')
            m.update(block)
            if not block:
                break
    return m.hexdigest()

md5=get_file_md5(r'E:\pythonCode\python\python22期\day17\funcs')
print(md5) # 一次性全部读取的结果：ebd2247f910544825ef34555af8b8806